<?php

/**
 * regdatosper actions.
 *
 * @package    atenea
 * @subpackage regdatosper
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2288 2006-10-02 15:22:13Z fabien $
 */
class regdatosperActions extends autoregdatosperActions
{

  protected function addFiltersCriteria($c)
  {
  	$c->add(RolPeer::CLASIFICACION, 'especialista');
  	$c->addJoin(AteneausuarioPeer::ROL_ID, RolPeer::ID);
  	$c->addJoin(DatoPersonalPeer::USUARIO_ID, AteneausuarioPeer::ID);
  }
  
  public function executeList()
  {
  	$this->getUser()->getAttributeHolder()->remove('objusuario');
  	$this->getUser()->getAttributeHolder()->remove('objusuario2');
  	
    $this->processSort();

    $this->processFilters();


    // pager
    $this->pager = new sfPropelPager('DatoPersonal', 10);
    $c = new Criteria();
    $this->addSortCriteria($c);
    $this->addFiltersCriteria($c);
    $this->pager->setCriteria($c);
    $this->pager->setPage($this->getRequestParameter('page', 1));
    $this->pager->init();
  }
	
  public function executeAnterior()
  {
  		$usuario = $this->getUser()->getAttribute('objusuario');
		$id = $usuario->getId();
		
		$criterio = new Criteria();
		$criterio->add(AteneausuarioPeer::ID, $id);
		$obj_ateneausuario = AteneausuarioPeer::doSelectOne($criterio);
		
		if($obj_ateneausuario)
		{
			return $this->redirect('regusuario/edit?id='.$id);
		}
		else
		{
			return $this->forward('regusuario', 'edit');
		}
  }
  
  public function executeCreate()
  {
  	$this->getUser()->getAttributeHolder()->remove('objusuario');
  	$this->getUser()->getAttributeHolder()->remove('objusuario2');
    return $this->forward('regusuario', 'create');
  }
  
  public function executeSave()
  {
    return $this->forward('regdatosper', 'edit');
  }

  protected function getUsuarioDepartamentoOrCreate($id = 'id')
  {
  	$c = new Criteria();
	$c->add(UsuarioDepartamentoPeer::USUARIO_ID, $id);
	$obj_usuariodepartamento = UsuarioDepartamentoPeer::doSelectOne($c);

	if ($obj_usuariodepartamento)
	{
		$usuario_departamento = $obj_usuariodepartamento;
	}
	else
	{
    	$usuario_departamento = new UsuarioDepartamento();
	}  	

    return $usuario_departamento;
  }
  
  protected function updateDatoPersonalFromRequest($id = 'id')
  {
  	$dato_personal = $this->getRequestParameter('dato_personal');
    		
	    if (isset($dato_personal['nombre']))
	    {
	      $this->dato_personal->setNombre($dato_personal['nombre']);
	    }
	    if (isset($dato_personal['apellido']))
	    {
	      $this->dato_personal->setApellido($dato_personal['apellido']);
	    }
	    if (isset($dato_personal['direccion_hab']))
	    {
	      $this->dato_personal->setDireccionHab($dato_personal['direccion_hab']);
	    }
	    if (isset($dato_personal['telefono_hab']))
	    {
	      $this->dato_personal->setTelefonoHab($dato_personal['telefono_hab']);
	    }
	    if (isset($dato_personal['telefono_movil']))
	    {
	      $this->dato_personal->setTelefonoMovil($dato_personal['telefono_movil']);
	    }
	    if (isset($dato_personal['email']))
	    {
	      $this->dato_personal->setEmail($dato_personal['email']);
	    }	    

	    $this->dato_personal->setUsuarioId($id ? $id : null);
	    
	    /* ********************* Usuario Departamento **********************/

	    $this->usuario_departamento = $this->getUsuarioDepartamentoOrCreate($id);

		if (isset($dato_personal['usuario_departamento_departamento_orientacion_id']))
    	{
      		$this->usuario_departamento->setDepartamentoOrientacionId($dato_personal['usuario_departamento_departamento_orientacion_id']);
    	}
    	
    	$this->usuario_departamento->setUsuarioId($id ? $id : null);

    	$this->usuario_departamento->save();
  }
  
  	public function executeRecibir()
	{
		$usuario = $this->getUser()->getAttribute('objusuario');

		$idusuario = $usuario->getId();
		$this->getUser()->setAttribute('objusuario',$usuario);
		
		$criterio = new Criteria();
		$criterio->add(DatoPersonalPeer::USUARIO_ID, $idusuario);
		$obj_datopersonal = DatoPersonalPeer::doSelectOne($criterio);
		
		if($obj_datopersonal)
		{
			return $this->redirect('regdatosper/edit?id='.$obj_datopersonal->getId());
		}
		else
		{
			return $this->forward('regdatosper', 'edit');
		}
	}
	
  public function executeEdit()
  {    
	$this->dato_personal = $this->getDatoPersonalOrCreate();

	if ($this->getRequest()->getMethod() == sfRequest::POST)
	{

		$dato_personal = $this->getRequestParameter('dato_personal');
		
	    if (isset($dato_personal['cedulapersonal']))
	    {
	      $this->dato_personal->setCedulapersonal($dato_personal['cedulapersonal']);
	    }
	    
	    $cedula = $this->dato_personal->getCedulapersonal();
	
	    if ($cedula)
	    {    	
	    	$usuario = $this->getUser()->getAttribute('objusuario');
    		$this->getUser()->setAttribute('objusuario2',$usuario);
	    	
	    	$usuario = $this->getUser()->getAttribute('objusuario2');
    		$usuario->save();
    		$idusuario = $usuario->getId();
    		
    		$rolid = $usuario->getRolId();
    		
    		$user = $this->getUser();

    		$user->cargarcredenciales($rolid,$idusuario);
    	
	    	$this->updateDatoPersonalFromRequest($idusuario);
	
			$this->saveDatoPersonal($this->dato_personal);
	
			$this->setFlash('notice', 'Your modifications have been saved');
			
			if ($this->getRequestParameter('save_and_add'))
			{
				return $this->redirect('regdatosper/create');
			}
			else if ($this->getRequestParameter('save_and_list'))
			{
				return $this->redirect('regdatosper/list');
			}
			else
			{
				return $this->redirect('regdatosper/edit?id='.$this->dato_personal->getId());
			}
    	}
    	else
    	{
    		$usuario = $this->getUser()->getAttribute('objusuario');
    		$this->getUser()->setAttribute('objusuario2',$usuario);
    		$this->labels = $this->getLabels();
    	}
	}
	else
	{
		$this->labels = $this->getLabels();
	}
  }
  
  public function executeDelete()
  {
    $this->dato_personal = DatoPersonalPeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->dato_personal);

    $idusuario = $this->dato_personal->getUsuarioId();
    $this->ateneausuario = AteneausuarioPeer::retrieveByPk($idusuario);
    $this->forward404Unless($this->ateneausuario);    
    
    $c = new Criteria();
	$c->add(UsuarioDepartamentoPeer::USUARIO_ID, $idusuario);
	$this->usuario_departamento = UsuarioDepartamentoPeer::doSelectOne($c);

	$this->forward404Unless($this->usuario_departamento);
    
    try
    {
      $this->usuario_departamento->delete();
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Usuario Departamento. Make sure it does not have any associated items.');
      return $this->forward('regdatosper', 'list');
    }
    
    try
    {
      $this->deleteDatoPersonal($this->dato_personal);
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Dato personal. Make sure it does not have any associated items.');
      return $this->forward('regdatosper', 'list');
    }
    
    try
    {
      $this->ateneausuario->delete();
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Ateneausuario. Make sure it does not have any associated items.');
      return $this->forward('regdatosper', 'list');
    }

    return $this->redirect('regdatosper/list');
  }
}
